From a4a61a08d722a90ea2dec0cf67cb9d27118f6711 Mon Sep 17 00:00:00 2001 From: GNU Libc Maintainers Date: Wed, 22 Jan 2025 23:57:51 +0100 Subject: [PATCH] git-CMSG_DATA commit cf13f740a91b5bbf6bb60a30b45c2a3933ff1259 Author: Samuel Thibault Date: Wed Jan 1 22:07:42 2025 +0100 bits/socket.h: Update to recent BSD definition The old BSD 4.4 definition (not used by Linux) was not 64b-proof: the cmsg_data field is supposed to CMSG_ALIGN'ed (as can be also seen in the CMSG_LEN macro). Suggested-by: Diego Nieto Cid Gbp-Pq: Topic hurd-i386 Gbp-Pq: Name git-CMSG_DATA.diff --- bits/socket.h | 12 ++++-------- sysdeps/mach/hurd/bits/socket.h | 12 ++++-------- 2 files changed, 8 insertions(+), 16 deletions(-) diff --git a/bits/socket.h b/bits/socket.h index 772074d52..5293e0fa1 100644 --- a/bits/socket.h +++ b/bits/socket.h @@ -221,17 +221,13 @@ struct cmsghdr of cmsghdr structure. */ int cmsg_level; /* Originating protocol. */ int cmsg_type; /* Protocol specific type. */ -#if __glibc_c99_flexarr_available - __extension__ unsigned char __cmsg_data __flexarr; /* Ancillary data. */ -#endif + /* This field is to be aligned with CMSG_ALIGN */ + /* __extension__ unsigned char __cmsg_data __flexarr; */ /* Ancillary data. */ }; /* Ancillary data object manipulation macros. */ -#if __glibc_c99_flexarr_available -# define CMSG_DATA(cmsg) ((cmsg)->__cmsg_data) -#else -# define CMSG_DATA(cmsg) ((unsigned char *) ((struct cmsghdr *) (cmsg) + 1)) -#endif +#define CMSG_DATA(cmsg) \ + ((unsigned char *) (cmsg) + CMSG_ALIGN (sizeof (struct cmsghdr))) #define CMSG_NXTHDR(mhdr, cmsg) __cmsg_nxthdr (mhdr, cmsg) diff --git a/sysdeps/mach/hurd/bits/socket.h b/sysdeps/mach/hurd/bits/socket.h index b5eeac373..cc043c8c5 100644 --- a/sysdeps/mach/hurd/bits/socket.h +++ b/sysdeps/mach/hurd/bits/socket.h @@ -228,17 +228,13 @@ struct cmsghdr of cmsghdr structure. */ int cmsg_level; /* Originating protocol. */ int cmsg_type; /* Protocol specific type. */ -#if __glibc_c99_flexarr_available - __extension__ unsigned char __cmsg_data __flexarr; /* Ancillary data. */ -#endif + /* This field is to be aligned with CMSG_ALIGN */ + /* __extension__ unsigned char __cmsg_data __flexarr; */ /* Ancillary data. */ }; /* Ancillary data object manipulation macros. */ -#if __glibc_c99_flexarr_available -# define CMSG_DATA(cmsg) ((cmsg)->__cmsg_data) -#else -# define CMSG_DATA(cmsg) ((unsigned char *) ((struct cmsghdr *) (cmsg) + 1)) -#endif +#define CMSG_DATA(cmsg) \ + ((unsigned char *) (cmsg) + CMSG_ALIGN (sizeof (struct cmsghdr))) #define CMSG_NXTHDR(mhdr, cmsg) __cmsg_nxthdr (mhdr, cmsg) -- 2.30.2